import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

public class ryuF  extends Actor
{
    private Stage s;
    private EnergyBall Ball;
    private EnergyBall2 Ball2;
    
    int contE=0;
    int contP=0;
    int direction = 1;
    
    private int movement=2;
    private int vidas=3;
    GreenfootImage stand = new GreenfootImage("standflip.gif");
    public boolean vi = true;
    public boolean state = true;
    public boolean state2= true;
    public boolean gForce = true;
    public boolean accion = false;
  
    public void boundary() 
    { 
        if((getX())<1199)
        {
            
        }
        else
        {
            setLocation(1, getY());
        }
        
        
    }    
    
    public ryuF()
   {

    }
    
    public void act()
    {
        World w=getWorld();
        Stage s=(Stage)getWorld();
        checkKeypress();
        punch();
        kick();
        bajavidas();
        duck();
        jump();
        boundary();
        Vidas();
        if(contP==4)
            {
             w.removeObjects(w.getObjects(null));
             w.setBackground("GameOver.png");   
            };
        accion = false;
    }

   
    
   public void checkKeypress()
   {
       World w=getWorld();
       Stage s=(Stage)getWorld();
       Actor Ene=getOneIntersectingObject(Posion.class);
       Actor pego=getOneIntersectingObject(Enemigo.class);
        Actor pego1=getOneIntersectingObject(Enemigo2.class);
        Actor pego2=getOneIntersectingObject(Enemigo3.class);
        Actor pego3=getOneIntersectingObject(Boss.class);
        if(Greenfoot.isKeyDown("right")) 
        {
            setImage("walk.gif");
            setLocation(getX()+movement,getY());
            direction = 1;
        }
        else if(Greenfoot.isKeyDown("left"))
        {
            setImage("standflip.gif");
            setLocation(getX()-movement,getY());
            direction = 2;
        }
        if(Ene!=null)
              {
                w.removeObject(Ene);
                contE++;
                Energia();
              }
       
            
         else setImage("stand.gif");
        if(!Greenfoot.isKeyDown("down")&&!Greenfoot.isKeyDown("x")&&direction==1&&!Greenfoot.isKeyDown("right"))
        {
            setImage("stand.gif");
        }
        if(!Greenfoot.isKeyDown("down")&&!Greenfoot.isKeyDown("x")&&direction==2&&!Greenfoot.isKeyDown("left"))
        {
            setImage("standflip.gif");
        }
        if(!Greenfoot.isKeyDown("up"))
        {
            gForce = true;
            counterWeight();
        }
        if(contE==2)
        {
            if(Greenfoot.isKeyDown("space")&&direction==1)
            {
                w.addObject(new EnergyBall(), getX()+60, getY()+10);
                contE=-2;
                Enemigo pg=(Enemigo) pego;

                    w.removeObject(pego);
                    contP++;
               
                Enemigo2 pg1=(Enemigo2) pego1;

                    w.removeObject(pego1);
                    contP++;
   
                Enemigo2 pg2=(Enemigo2) pego2;

                    w.removeObject(pego);
                    contP++;

                Boss pg3=(Boss) pego3;

                    w.removeObject(pego3);
                    contP++;
  
            }
            if(Greenfoot.isKeyDown("space")&&direction==2)
            {
                w.addObject(new EnergyBall2(), getX()-60, getY()-10);
                contE=-2;
                Enemigo pg=(Enemigo) pego;

                    w.removeObject(pego);
                    contP++;

                Enemigo2 pg1=(Enemigo2) pego1;


                    w.removeObject(pego1);
                    contP++;
   
                Enemigo2 pg2=(Enemigo2) pego2;


                    w.removeObject(pego);
                    contP++;

                Boss pg3=(Boss) pego3;

                    w.removeObject(pego3);
                    contP++;
    
            }
        }
    }
    public void punch()
    {
        World w=getWorld();
        Actor pego=getOneIntersectingObject(Enemigo.class);
        Actor pego1=getOneIntersectingObject(Enemigo2.class);
        Actor pego2=getOneIntersectingObject(Enemigo3.class);
        Actor pego3=getOneIntersectingObject(Boss.class);

        
         if (Greenfoot.isKeyDown("z")&&direction==1)
        {
            vi=true;
            if(vi==true){
            setImage("punch.gif");
            
           if(pego!=null)
           {
            Enemigo pg=(Enemigo) pego;
            if(pg.regresaDano()<=0)
            {
             w.removeObject(pego);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg.dano();
             pg.PosGolpe();
            }
           }
           if(pego1!=null)
           {
            Enemigo2 pg1=(Enemigo2) pego1;
            if(pg1.regresaDano()<=0)
            {
             w.removeObject(pego1);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg1.dano();
             pg1.PosGolpe();
            }
           }
           if(pego2!=null)
           {
            Enemigo3 pg2=(Enemigo3) pego2;
            if(pg2.regresaDano()<=0)
            {
             w.removeObject(pego2);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg2.dano();
             pg2.PosGolpe();
            }
           }
           if(pego3!=null)
           {
            Boss pg3=(Boss) pego3;
            if(pg3.regresaDano()<=0)
            {
             w.removeObject(pego3);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg3.dano();
             pg3.PosGolpe();
            }
           }    
        }

         if (Greenfoot.isKeyDown("z")&&direction==2)
        {
            vi=true;
            if(vi==true){
            setImage("punchleft.gif");
            
           if(pego!=null)
           {
            Enemigo pg=(Enemigo) pego;
            if(pg.regresaDano()<=0)
             {
             w.removeObject(pego);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg.dano();            
             pg.PosGolpe();
            }
           }
           if(pego1!=null)
           {
            Enemigo2 pg1=(Enemigo2) pego1;
            if(pg1.regresaDano()<=0)
            {
             w.removeObject(pego1);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg1.dano();            
             pg1.PosGolpe();
            }
           }
           if(pego2!=null)
           {
            Enemigo3 pg2=(Enemigo3) pego2;
            if(pg2.regresaDano()<=0)
            {
             w.removeObject(pego2);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {   
             pg2.dano();            
             pg2.PosGolpe();
            }
           }
           if(pego3!=null)
           {
            Boss pg3=(Boss) pego3;
            if(pg3.regresaDano()<=0)
            {
             w.removeObject(pego3);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg3.dano();            
             pg3.PosGolpe();
            }
           }
        }
    }
    }
    }
    public void kick()
    {
        World w=getWorld(); 
        Actor pego=getOneIntersectingObject(Enemigo.class);
        Actor pego1=getOneIntersectingObject(Enemigo2.class);
        Actor pego2=getOneIntersectingObject(Enemigo3.class);
        Actor pego3=getOneIntersectingObject(Boss.class);

        if (Greenfoot.isKeyDown("x")&&direction==1) 
        {
            vi=true;
            if(vi==true){
            setImage("kick.gif");
           if(pego!=null)
           {
            Enemigo pg=(Enemigo) pego;
            if(pg.regresaDano()<=0)
            {
             w.removeObject(pego);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg.dano();            
             pg.PosPatada();
            }
           }
           if(pego1!=null)
           {
            Enemigo2 pg1=(Enemigo2) pego1;
            if(pg1.regresaDano()<=0)
            {
             w.removeObject(pego1);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg1.dano();            
             pg1.PosGolpe();
            }
           }
           if(pego2!=null)
           {
            Enemigo3 pg2=(Enemigo3) pego2;
            if(pg2.regresaDano()<=0)
            {
             w.removeObject(pego2);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg2.dano();            
             pg2.PosGolpe();
            }
           }
           if(pego3!=null)
           {
            Boss pg3=(Boss) pego3;
            if(pg3.regresaDano()<=0)
            {
             w.removeObject(pego3);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg3.dano();            
             pg3.PosGolpe();
            }
           }
        }
        if (Greenfoot.isKeyDown("x")&&direction==2) 
        {
            vi=true;
            if(vi==true){
            setImage("kickleft.gif");
           if(pego!=null)
           {
            Enemigo pg=(Enemigo) pego;
            if(pg.regresaDano()<=0)
             {
             w.removeObject(pego);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg.dano();            
             pg.PosPatada();
            }
           }
           if(pego1!=null)
           {
            Enemigo2 pg1=(Enemigo2) pego1;
            if(pg1.regresaDano()<=0)
            {
             w.removeObject(pego1);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg1.dano();            
             pg1.PosGolpe();
            }
           }
           if(pego2!=null)
           {
            Enemigo3 pg2=(Enemigo3) pego2;
            if(pg2.regresaDano()<=0)
            {
             w.removeObject(pego2);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg2.dano();            
             pg2.PosGolpe();
            }
           }
           if(pego3!=null)
           {
            Boss pg3=(Boss) pego3;
            if(pg3.regresaDano()<=0)
            {
             w.removeObject(pego3);
             contP++;
             w.addObject(new Posion(),getX()+100,getY());
            }
            else
            {
             pg3.dano();            
             pg3.PosGolpe();
            }
           }
        }
        }
    }
    }
    public void duck()
    {
        if (Greenfoot.isKeyDown("down")&&direction==1)
        {
            setImage("Duck.gif");
        }
        if (Greenfoot.isKeyDown("down")&&direction==2)
        {
            setImage("duckleft.gif");
        }
    }
    public void jump()
    {
          if(Greenfoot.isKeyDown("up")&&direction==1)
        {
            setImage("Jump.gif");
            setLocation(getX(),getY()-10);
            gForce = false;
        }
        if(Greenfoot.isKeyDown("up")&&direction==2)
        {
            setImage("jumpleft.gif");
            setLocation(getX(),getY()-10);
            gForce = false;
        }
    }
    public void shoot()
    {
        if(direction==1 && Greenfoot.isKeyDown("space"))
        {
            setImage("EnergyBall.gif");
        }
        if(direction==2 && Greenfoot.isKeyDown("space"))
        {
            setImage("EnergyBall2.gif");
        }
    }
    public void counterWeight()
  
    {
        if(getY()<=700)
        {
            setLocation(getX(), getY()+10);
        }
        base();
    }
    public void base()
    {
        if(getY()>= 700)
        {
            setLocation(getX(),700);
        }
    }
    
    public boolean regresaAcc()
    {
        return accion;
    }
    
    public void cambiaP()
    {
            setLocation(getX(),200);
            vi=false;
    }
    
    public void bajavidas()
    {
      World w=getWorld(); 
        Actor pego3=getOneIntersectingObject(EnergyBall2.class);
        if(vi==false)
          vidas--;
      EnergyBall2 pg3=(EnergyBall2) pego3; 
        if(pego3!=null)
          {
              vidas--;
              cambiaP();
              w.removeObject(pego3);
           }
    }
    public int revidas()
    {
        return vidas;
    }
    
    public void Vidas()
    {
       World w=getWorld();
        w.removeObjects(w.getObjects(vidas.class));
        
       switch(vidas)
       {   
           case 3: w.addObject(new vidas(), 50, 50);
                   w.addObject(new vidas(), 110, 50);
                   w.addObject(new vidas(), 170, 50);
                break;
           case 2: w.addObject(new vidas(), 50, 50);
                   w.addObject(new vidas(), 110, 50);
                break;
           case 1: w.addObject(new vidas(), 50, 50);
                break;
           default:w.removeObjects(w.getObjects(null)); 
                   w.setBackground("GameOver.png");
                break;
       } 
    }
    public void Energia()
    {
       World w=getWorld();
        w.removeObjects(w.getObjects(Posion.class));
        
       switch(contE)
       {   
           case 4: w.addObject(new Posion(), 50, 100);
                   w.addObject(new Posion(), 110, 100);
                   w.addObject(new Posion(), 170, 100);
                break;
           case 3: w.addObject(new Posion(), 50, 100);
                   w.addObject(new Posion(), 110, 100);
                   w.addObject(new Posion(), 170, 100);
                break;
           case 2: w.addObject(new Posion(), 50, 100);
                   w.addObject(new Posion(), 110, 100);
                break;
           case 1: w.addObject(new Posion(), 50, 100);
                break;
           default:
                break;
       } 
    }
    public void objectLimit()
    {
        World w=getWorld();
        if(w.numberOfObjects()==3)
        {
            w.removeObject(Ball);
            w.removeObject(Ball2);
        }
    }
}